<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let obj1 = {
            name:'yanzhen',
            age:18
        }
        let obj2 = {
            msg:'叫了个闪送'
        }
        let obj3 = {};
        console.dir(Object);
        // Object.assign(target,source1,2,....) 将源对象上的属性复制到目标对象上
        Object.assign(obj3,obj1,obj2);
        console.log(obj3);

        // Object.create() 创建一个新对象，将现有的对象作为这个新对象的__proto__所指向的对象
        let obj4 = {
            name:'yanzhen',
            age:18
        }
        let obj5 = Object.create(obj4);
        console.log(obj5);

        // Object.entries() 将已有的对象上的自身的可枚举的键值对变为数组
        console.log(obj1);
        let arr1 = Object.entries(obj1);
        console.log(arr1);

        let obj6 = Object.fromEntries(arr1);
        console.log(obj6);

        // hasOwnProperty 在obj1,的原型对象上 查看该属性是否是对象自身的方法或者属性，是true，如果不是返回false，即使是原型对象上的方法也是false
        Object.prototype.jump = function(){
            console.log('jump');
        }
        console.log(obj1.hasOwnProperty('name'));
        console.log(obj1.hasOwnProperty('jump'));
        // for in 能遍历数组，主要是用来遍历对象
        let arr5 = [1,2,5,9];
        console.log(arr5);
        for(var e in arr5){
            console.log(e);
        }
        // for in主要用来遍历对象  遍历的是属性名  
        for(var key in obj1){
            console.log(key);
        }
        // for in  不仅仅遍历自身的属性和方法还能遍历到原型对象上的方法

        let obj7 = {
            name:'yanzhen',
            age:18
        }
        // Object.freeze()冻结一个对象冻结之后不能进行更改
        Object.freeze(obj7);
        obj7.name = 'yaosang';
        console.log(obj7);
        // 删除obj7的属性age
        delete obj7.age;
        console.log(obj7);

        //  Object.isFrozen()测试一个对象是否被冻结 冻结 true  没有冻结 false4
        console.log(Object.isFrozen(obj7));


        // Object.keys 该方法返回一个对象上的可枚举的属性名 结果是个数组
        let arr_key = Object.keys(obj7);
        console.log(arr_key);
        // Object.values 该方法返回一个对象上的可枚举的属性值  结果是个数组
        let arr_value = Object.values(obj7);
        console.log(arr_value);
    </script>
</body>
</html>